from _07_面向对象高级编程.mydict import Dict
import unittest


class TestDict(unittest.TestCase):  # 编写单元测试时，需要编写一个测试类，从unittest.TestCase继承。
    # 以test开头的方法就是测试方法，不以test开头的方法不被认为是测试方法，测试的时候不会被执行。
    def setUp(self):
        print('setUp...')

    def test_init(self):
        d = Dict(a=1, b="test")
        self.assertEqual(d.a, 1)
        self.assertEqual(d.b, "test")
        self.assertTrue(isinstance(d, dict))

    def test_key(self):
        d = Dict()
        d["key"] = "value"
        self.assertEqual(d.keys, "value")

    def test_attr(self):
        d = Dict()
        d["key"] = "value"
        self.assertTrue("key" in d)
        self.assertEqual(d["key"], "value")

    def test_keyError(self):
        d = Dict()
        with self.assertRaises(KeyError):
            value = d["empty"]

    def test_attrError(self):
        d = Dict()
        with self.assertRaises(AttributeError):
            value = d.empty

    def tearDown(self):
        print('tearDown...')


if __name__ == '__main__':  # 另一种方法是在命令行通过参数-m unittest直接运行单元测试：$ python -m unittest mydict_test
    unittest.main()
